﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace Dominio
{
    [DataContract]
    [KnownType(typeof(Dominio.Cuenta))]
    [KnownType(typeof(Dominio.Buzon))]
    [KnownType(typeof(Dominio.ObjetoBuzon))]
    [KnownType(typeof(Dominio.Carpeta))]
    [KnownType(typeof(Dominio.Mensaje))]
    public abstract class OPersistente
    {

        private static IPersistencia ip;
        private String oid;

        [DataMember]
        public String Oid
        {
            get { return oid; }
            set { oid = value; }
        }

        public static String SiguienteOID()
        {
            return Guid.NewGuid().ToString();
        }

        public static void SetearPersistencia(IPersistencia persistencia)
        {
            ip = persistencia;
        }

        public void Agregarse()
        {
            this.Oid = OPersistente.SiguienteOID();
            ip.Agregar(this);
        }

        public void Modificarse()
        {
            ip.Modificar(this);
        }

        public void Elminarse()
        {
            ip.Eliminar(this);
        }

        public void RecuperarDatos()
        {
            ip.TraerDatos(this);
        }

        public List<OPersistente> TraerLista()
        {
            return ip.TraerLista(this);
        }

        public override bool Equals(object obj)
        {
            return this.Oid.Equals(((OPersistente)obj).Oid);
        }
    }
}
